/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.adsi.vista;

import com.adsi.logica.LogicaClientes;
import com.adsi.logica.LogicaClientesLocal;
import com.adsi.logica.TiposDocumentosLogicaLocal;
import com.adsi.modelo.Clientes;
import com.adsi.modelo.TiposDocumentos;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;
import org.primefaces.component.selectonemenu.SelectOneMenu;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.chart.PieChartModel;

/**
 *
 * @author Estudiante
 */
@ManagedBean(name="clienteVista")
@RequestScoped
public class ClientesVista implements Serializable{

    @EJB
    private LogicaClientesLocal clientesLogica;
    
    @EJB
    private TiposDocumentosLogicaLocal docLogica;
    
    private InputText txtCedulaCliente;
    private SelectOneMenu cmbTipoDoc;
    private InputText txtNombreCliente;
    private InputText txtDireccionCliente;
    private InputText txtTelefonoCliente;
    private InputText txtEmailCliente;
    private CommandButton btnRegistrar;
    private CommandButton btnModificar;
    private CommandButton btnLimpiar;
    private CommandButton btnEliminar;
    private List<TiposDocumentos> listaDocumentos;
    private List<Clientes> listaClientes;
    private ArrayList<SelectItem> itemsDocumentos=null;
    private Clientes selectedClientes;
    /**
     * Creates a new instance of ClientesVista
     */
    public ClientesVista() {
    }

    public LogicaClientesLocal getClientesLogica() {
        return clientesLogica;
    }

    public void setClientesLogica(LogicaClientesLocal clientesLogica) {
        this.clientesLogica = clientesLogica;
    }

    public TiposDocumentosLogicaLocal getDocLogica() {
        return docLogica;
    }

    public void setDocLogica(TiposDocumentosLogicaLocal docLogica) {
        this.docLogica = docLogica;
    }

    public InputText getTxtCedulaCliente() {
        return txtCedulaCliente;
    }

    public void setTxtCedulaCliente(InputText txtCedulaCliente) {
        this.txtCedulaCliente = txtCedulaCliente;
    }

    public SelectOneMenu getCmbTipoDoc() {
        return cmbTipoDoc;
    }

    public void setCmbTipoDoc(SelectOneMenu cmbTipoDoc) {
        this.cmbTipoDoc = cmbTipoDoc;
    }

    public InputText getTxtNombreCliente() {
        return txtNombreCliente;
    }

    public void setTxtNombreCliente(InputText txtNombreCliente) {
        this.txtNombreCliente = txtNombreCliente;
    }

    public InputText getTxtDireccionCliente() {
        return txtDireccionCliente;
    }

    public void setTxtDireccionCliente(InputText txtDireccionCliente) {
        this.txtDireccionCliente = txtDireccionCliente;
    }

    public InputText getTxtTelefonoCliente() {
        return txtTelefonoCliente;
    }

    public void setTxtTelefonoCliente(InputText txtTelefonoCliente) {
        this.txtTelefonoCliente = txtTelefonoCliente;
    }

    public InputText getTxtEmailCliente() {
        return txtEmailCliente;
    }

    public void setTxtEmailCliente(InputText txtEmailCliente) {
        this.txtEmailCliente = txtEmailCliente;
    }

    public CommandButton getBtnRegistrar() {
        return btnRegistrar;
    }

    public void setBtnRegistrar(CommandButton btnRegistrar) {
        this.btnRegistrar = btnRegistrar;
    }

    public CommandButton getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(CommandButton btnModificar) {
        this.btnModificar = btnModificar;
    }

    public CommandButton getBtnLimpiar() {
        return btnLimpiar;
    }

    public void setBtnLimpiar(CommandButton btnLimpiar) {
        this.btnLimpiar = btnLimpiar;
    }

    public CommandButton getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(CommandButton btnEliminar) {
        this.btnEliminar = btnEliminar;
    }

    public List<TiposDocumentos> getListaDocumentos() {
        return listaDocumentos;
    }

    public void setListaDocumentos(List<TiposDocumentos> listaDocumentos) {
        this.listaDocumentos = listaDocumentos;
    }

    public List<Clientes> getListaClientes() {
        if(listaClientes==null){
            try {
                listaClientes=clientesLogica.consultar();
            } catch (Exception ex) {
                Logger.getLogger(ClientesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return listaClientes;
    }

    public void setListaClientes(List<Clientes> listaClientes) {
        this.listaClientes = listaClientes;
    }
    
    public ArrayList<SelectItem> getItemsDocumentos() {
        if(itemsDocumentos==null){
            try {
                itemsDocumentos=new ArrayList<>();
                List<TiposDocumentos> lista=docLogica.consultar();
                for (int i = 0; i < lista.size(); i++) {
                    itemsDocumentos.add(new SelectItem(lista.get(i).getTdocCodigo(), lista.get(i).getTdocNombre()));
                }
            } catch (Exception ex) {
                Logger.getLogger(ClientesVista.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        return itemsDocumentos;
    }

    public void setItemsDocumentos(ArrayList<SelectItem> itemsDocumentos) {
        this.itemsDocumentos = itemsDocumentos;
    }

    public Clientes getSelectedClientes() {
        return selectedClientes;
    }

    public void setSelectedClientes(Clientes selectedClientes) {
        this.selectedClientes = selectedClientes;
    }
    

    public void funcion_limpiar(){
        txtCedulaCliente.setValue("");
        cmbTipoDoc.setValue("");
        txtNombreCliente.setValue("");
        txtDireccionCliente.setValue("");
        txtTelefonoCliente.setValue("");
        txtEmailCliente.setValue("");
        btnRegistrar.setDisabled(false);
        btnModificar.setDisabled(true);
        btnEliminar.setDisabled(true);
        txtCedulaCliente.setDisabled(false);
    }
    
    public void funcion_registrar(){
        try {
            Clientes c=new Clientes();
            c.setCliCedula(Long.parseLong(txtCedulaCliente.getValue().toString()));
            TiposDocumentos docs=docLogica.ConsultarPorCod(Long.parseLong(cmbTipoDoc.getValue().toString()));
            c.setTdocCodigo(docs);
            c.setCliNombre(txtNombreCliente.getValue().toString());
            c.setCliDireccion(txtDireccionCliente.getValue().toString());
            c.setCliTelefono(txtTelefonoCliente.getValue().toString());
            c.setCliMail(txtEmailCliente.getValue().toString());
            clientesLogica.registrar(c);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Información", "El cliente se registró con éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
            Logger.getLogger(ClientesVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        listaClientes=null;
        funcion_limpiar();
        btnModificar.setDisabled(false);
        btnEliminar.setDisabled(false);
        
    }
    
    public void funcion_seleccionar(SelectEvent event){
        Clientes clienteSeleccionado=(Clientes) event.getObject();
        txtCedulaCliente.setValue(clienteSeleccionado.getCliCedula());
        cmbTipoDoc.setValue(clienteSeleccionado.getTdocCodigo().getTdocCodigo());
        txtNombreCliente.setValue(clienteSeleccionado.getCliNombre());
        txtDireccionCliente.setValue(clienteSeleccionado.getCliDireccion());
        txtTelefonoCliente.setValue(clienteSeleccionado.getCliTelefono());
        txtEmailCliente.setValue(clienteSeleccionado.getCliMail());
        txtCedulaCliente.setDisabled(true);
        btnRegistrar.setDisabled(true);
        btnModificar.setDisabled(false);
        btnEliminar.setDisabled(false);
    }
    
    public void funcion_modificar(){
        try {
            Clientes c=new Clientes();
            c.setCliCedula(Long.parseLong(txtCedulaCliente.getValue().toString()));
            TiposDocumentos t=docLogica.ConsultarPorCod(Long.parseLong(cmbTipoDoc.getValue().toString()));
            c.setTdocCodigo(t);
            c.setCliNombre(txtNombreCliente.getValue().toString());
            c.setCliDireccion(txtDireccionCliente.getValue().toString());
            c.setCliTelefono(txtTelefonoCliente.getValue().toString());
            c.setCliMail(txtEmailCliente.getValue().toString());
            clientesLogica.modificar(c);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Información", "El cliente se modificó con éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
            Logger.getLogger(ClientesVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        listaClientes=null;
        funcion_limpiar();
    }
    
    public void funcion_eliminar(){
        try {
            Clientes c=new Clientes();
            c.setCliCedula(Long.parseLong(txtCedulaCliente.getValue().toString()));
            clientesLogica.eliminar(c);
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_INFO, "Información", "El cliente se eliminó con éxito"));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage("mensaje", new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", ex.getMessage()));
            Logger.getLogger(ClientesVista.class.getName()).log(Level.SEVERE, null, ex);
        }
        listaClientes=null;
        funcion_limpiar();
    }

 
   
     
}
    
    

